﻿/**
 * 
 * @file FITKAcousticsPhysics.h
 * @brief 声学物理属性管理器
 * @author LiBaojun (libaojunqd@foxmail.com)
 * @date 2024-10-06
 * 
 */
#ifndef _FITKACOUSTICS_PHYSICS__H___
#define _FITKACOUSTICS_PHYSICS__H___
 
#include "FITKAcousticsPhysicsAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataObject.h"


namespace Acoustics
{
    class FITKGlobalFrequencyDomain;
    class FITKAcousticsMaterialManager;
    class FITKAcousticsPhysicsPropManager;
    class FITKAcousticsNCTManager;
    class FITKAcousticsSpectraManager;
    class FITKAcousticsLoadManager;
    class FITKSolverLoadCaseManager;
    /**
     * @brief 声学物理属性管理器
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-10-06
     */
    class FITKAcousticsPhysicsAPI FITKAcousticsPhysics :
        public Core::FITKAbstractDataObject
    {
        FITKCLASS(Acoustics, FITKAcousticsPhysics);
    public:
        /**
         * @brief Construct a new FITKAcousticsPhysics object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        explicit FITKAcousticsPhysics();
        /**
         * @brief Destroy the FITKAcousticsPhysics object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        virtual ~FITKAcousticsPhysics();
        /**
         * @brief 从AppFrame中获取对象
         * @return FITKAcousticsPhysics* 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        static FITKAcousticsPhysics* GetAcousticsPhysicsFromFrame();
        /**
         * @brief 获取全局频率范围
         * @return FITKGlobalFrequencyDomain* 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKGlobalFrequencyDomain* getFrequencyDomain();
        /**
         * @brief 获取材料管理器
         * @return FITKAcousticsMaterialManager* 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKAcousticsMaterialManager* getMaterialManager();
        /**
         * @brief 获取物理属性管理器
         * @return FITKAcousticsPhysicsPropManager* 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKAcousticsPhysicsPropManager* getPhysicsPropManager();
        
        /**
         * @brief 获取声学包管理器
         * @return FITKAcousticsNCTManager*
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */ 
        FITKAcousticsNCTManager* getFITKAcousticsNCTManager();
        /**
         * @brief 获取频谱管理器
         * @return FITKAcousticsNCTManager*
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKAcousticsSpectraManager* getFITKAcousticsSpectraManager();
        /**
         * @brief    获取载荷管理器
         * @return   FITKAcousticsLoadManager *
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        FITKAcousticsLoadManager* getFITKAcousticsLoadManager();
        /**
         * @brief    获取求解的载荷工况管理器
         * @return   FITKSolverLoadCaseManager *
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-02-21
         */
        FITKSolverLoadCaseManager* getSolverLoadCaseManager();
        /**
         * @brief 清空声学物理属性
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-21
         */
        void clearAcousticsPhysics();

    private:
        /**
         * @brief 全局频率范围
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKGlobalFrequencyDomain* _frequencyDomain{};
        /**
         * @brief 材料管理器
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKAcousticsMaterialManager* _materialManager{};
        /**
         * @brief 物理属性管理器
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        FITKAcousticsPhysicsPropManager* _physicsPropManager{};
        /**
        * @brief 声学包管理器
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-21
        */
        FITKAcousticsNCTManager* _acousticsNCTManager{};
        /**
        * @brief 频谱管理器
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-21
        */
        FITKAcousticsSpectraManager* _spectraManager{};
        /**
         * @brief  载荷管理器
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        FITKAcousticsLoadManager* _loadManager{};
        /**
         * @brief  求解载荷工况管理器
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-02-21
         */
        FITKSolverLoadCaseManager* _loadCaseManager{};
    };
}


#endif
